/*
 * 功能：配置跨域资源共享（CORS）
 * 作者：张杨(Sunny)
 * 日期： 2024/10/25 上午11:10
 */
package com.example.springboot.common;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;


/**
 * CorsConfig 类用于配置跨域资源共享（CORS）
 * 该类通过Spring的配置机制，定义了一个CorsFilter bean来处理跨域请求
 * 主要配置包括允许的源、请求头、请求方法等
 */
@Configuration
public class CorsConfig {

    // 当前跨域请求最大有效时长1天（单位：秒）
    private static final long MAX_AGE = 24 * 60 * 60;

    /**
     * 创建并配置 CorsFilter 实例，用于处理跨域请求。
     *
     * @return 配置好的 CorsFilter 实例
     */
    @Bean  // 将返回的对象注册为Spring容器中的一个Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址，允许所有origin来源
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头，允许所有header请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法，允许所有method请求方法
        corsConfiguration.setMaxAge(MAX_AGE); // 设置跨域请求的最大有效时长
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置，/**表示所有接口
        return new CorsFilter(source); // 返回配置好的CorsFilter实例
    }
}
